Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitafe0ab4

Browse files
author
Gauvain Pocentek
committed
Merge pull request#44 from mjmaenpaa/noid_objects
Support api-objects which don't have id in api response.
2 parentsf7dfad3 +134fc7a commitafe0ab4

File tree

1 file changed

+27
-8
lines changed

1 file changed

+27
-8
lines changed

‎gitlab.py

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -231,9 +231,14 @@ def list(self, obj_class, **kwargs):
231231
cls=obj_class
232232
ifobj_class._returnClass:
233233
cls=obj_class._returnClass
234-
235-
# Remove parameters from kwargs before passing it to constructor
234+
236235
cls_kwargs=kwargs.copy()
236+
237+
# Add _created manually, because we are not creating objects
238+
# through normal path
239+
cls_kwargs['_created']=True
240+
241+
# Remove parameters from kwargs before passing it to constructor
237242
forkeyin ['page','per_page']:
238243
ifkeyincls_kwargs:
239244
delcls_kwargs[key]
@@ -524,6 +529,8 @@ class GitlabObject(object):
524529
_url=None
525530
_returnClass=None
526531
_constructorTypes=None
532+
# Tells if _getListOrObject should return list or object when id is None
533+
getListWhenNoId=True
527534
canGet=True
528535
canList=True
529536
canCreate=True
@@ -549,16 +556,18 @@ def list(cls, gl, **kwargs):
549556
returngl.list(cls,**kwargs)
550557

551558
def_getListOrObject(self,cls,id,**kwargs):
552-
ifidisNone:
559+
ifidisNoneandcls.getListWhenNoId:
553560
ifnotcls.canList:
554-
raiseGitlabGetError
561+
raiseGitlabListError
555562
returncls.list(self.gitlab,**kwargs)
556-
563+
elifidisNoneandnotcls.getListWhenNoId:
564+
ifnotcls.canGet:
565+
raiseGitlabGetError
566+
returncls(self.gitlab,id,**kwargs)
557567
elifisinstance(id,dict):
558568
ifnotcls.canCreate:
559569
raiseGitlabCreateError
560570
returncls(self.gitlab,id,**kwargs)
561-
562571
else:
563572
ifnotcls.canGet:
564573
raiseGitlabGetError
@@ -587,6 +596,7 @@ def _create(self):
587596

588597
json=self.gitlab.create(self)
589598
self._setFromDict(json)
599+
self._created=True
590600

591601
def_update(self):
592602
ifnotself.canUpdate:
@@ -596,7 +606,7 @@ def _update(self):
596606
self._setFromDict(json)
597607

598608
defsave(self):
599-
ifhasattr(self,'id'):
609+
ifself._created:
600610
self._update()
601611
else:
602612
self._create()
@@ -605,24 +615,33 @@ def delete(self):
605615
ifnotself.canDelete:
606616
raiseNotImplementedError
607617

608-
ifnothasattr(self,'id'):
618+
ifnotself._created:
609619
raiseGitlabDeleteError
610620

611621
returnself.gitlab.delete(self)
612622

613623
def__init__(self,gl,data=None,**kwargs):
624+
self._created=False
614625
self.gitlab=gl
615626

616627
ifdataisNoneorisinstance(data,six.integer_types)or\
617628
isinstance(data,six.string_types):
618629
data=self.gitlab.get(self.__class__,data,**kwargs)
630+
# Object is created because we got it from api
631+
self._created=True
619632

620633
self._setFromDict(data)
621634

622635
ifkwargs:
623636
fork,vinkwargs.items():
624637
self.__dict__[k]=v
625638

639+
# Special handling for api-objects that don't have id-number in api
640+
# responses. Currently only Labels and Files
641+
ifnothasattr(self,"id"):
642+
self.id=None
643+
644+
626645
def__str__(self):
627646
return'%s => %s'% (type(self),str(self.__dict__))
628647

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp