zope.keyreference

সফটওয়্যার স্ক্রিনশট:
zope.keyreference
সফটওয়্যার বিবরণ:
সংস্করণ: 3.6.4
তারিখ আপলোড: 15 Apr 15
ডেভেলপার: Zope Corporation and Contributors
লাইসেন্স: বিনামূল্যে
জনপ্রিয়তা: 34

Rating: nan/5 (Total Votes: 0)

zope.keyreference স্থিতিশীল তুলনা এবং হ্যাশ সমর্থন যে বস্তুর রেফারেন্স প্রদান করে.
ক্রমাগত বস্তু জন্য কী তথ্যসূত্র
zope.keyreference.persistent.KeyReferenceToPersistent ক্রমাগত বস্তু জন্য একটি zope.keyreference.interfaces.IKeyReference রেফারেন্স প্রদান করে.
এর একটি উদাহরণ তাকান. প্রথমত, আমরা একটি ডাটাবেসের মধ্যে কিছু ক্রমাগত বস্তু তৈরি করব:
& Nbsp; >>> থেকে ZODB.MappingStorage আমদানি ডিবি
& Nbsp; >>> আমদানি লেনদেন
& Nbsp; >>> persistent.mapping আমদানি PersistentMapping থেকে
& Nbsp; >>> ডিবি = ডিবি ()
& Nbsp; >>> Conn = db.open ()
& Nbsp; >>> রুট = conn.root ()
& Nbsp; >>> রুট ['ob1'] = PersistentMapping ()
& Nbsp; >>> রুট ['OB2'] = PersistentMapping ()
& Nbsp; >>> transaction.commit ()
তারপর আমরা কিছু কি রেফারেন্স তৈরি করব:
& Nbsp; >>> zope.keyreference.persistent আমদানি KeyReferenceToPersistent থেকে
& Nbsp; >>> key1 = KeyReferenceToPersistent (root পরিচয়ে ['ob1'])
& Nbsp; >>> key2 = KeyReferenceToPersistent (root পরিচয়ে ['OB2'])
আমরা বস্তু পেতে কি কল করতে পারেন:
& Nbsp; >>> key1 () রুট ['ob1'], key2 () রুট ['OB2']
& Nbsp; (সত্য, সত্য)
একই বস্তু নতুন কি বয়সী সমান হয়:
& Nbsp; >>> KeyReferenceToPersistent (root পরিচয়ে ['ob1']) == key1
& Nbsp; সত্য
এবং একই হ্যাশ আছে:
& Nbsp; >>> হ্যাশ (KeyReferenceToPersistent (root পরিচয়ে ['ob1'])) == হ্যাশ (key1)
& Nbsp; সত্য
অন্যান্য কি রেফারেন্স বাস্তবায়নের তাদের কী ধরনের আইডি দ্বারা ভিন্ন হয়. মূল রেফারেন্স কোনো ধরনের নির্দিষ্ট তথ্য প্রথম তাদের কী ধরনের উপর এবং দ্বিতীয় বাছাই করা উচিত:
& Nbsp; >>> zope.interface আমদানি কার্যকরী থেকে
& Nbsp; >>> zope.keyreference.interfaces IKeyReference আমদানি থেকে
& Nbsp; >>> বর্গ DummyKeyReference (বস্তু):
& Nbsp; ... কার্যকরী (IKeyReference)
& Nbsp; ... key_type_id = 'zope.app.keyreference.object'
& Nbsp; ... Def __init __ (স্ব, OBJ):
& Nbsp; ... self.object = OBJ
& Nbsp; ... Def __cmp __ (স্ব, অন্যান্য):
& Nbsp; ... যদি self.key_type_id == other.key_type_id:
& Nbsp; ... ফিরে CMP (self.object, other.object)
& Nbsp; ... ফিরে CMP (self.key_type_id, other.key_type_id)
& Nbsp; >>> dummy_key1 = DummyKeyReference (বস্তু ())
& Nbsp; >>> dummy_key2 = DummyKeyReference (বস্তু ())
& Nbsp; >>> dummy_key3 = DummyKeyReference (বস্তু ())
& Nbsp; >>> কি = [key1, dummy_key1, dummy_key2, key2, dummy_key3]
& Nbsp; >>> keys.sort ()
& Nbsp; >>> key_type_ids = [key.key_type_id কি কি জন্য]
& Nbsp; >>> key_type_ids [0: 3] .count ('zope.app.keyreference.object')
& Nbsp; 3
. & Nbsp; >>> key_type_ids [3] ('zope.app.keyreference.persistent') গণনা
& Nbsp; 2
আমরা ডাটাবেসের মধ্যে কী রেফারেন্স সংরক্ষণ করব:
& Nbsp; >>> রুট ['key1'] = key1
& Nbsp; >>> রুট ['key2'] = key2
এবং আবার বস্তু সংরক্ষণ করতে কি ব্যবহার:
& Nbsp; >>> রুট [key1] = রুট ['ob1']
& Nbsp; >>> রুট [key2] = রুট ['OB2']
& Nbsp; >>> transaction.commit ()
এখন আমরা অন্য সংযোগ খোলা পাবেন:
& Nbsp; >>> conn2 = db.open ()
এবং আমরা বস্তু সন্ধান কী ব্যবহার করতে পারেন তা যাচাই করুন:
& Nbsp; >>> root2 = conn2.root ()
& Nbsp; >>> key1 = root2 ['key1']
& Nbsp; >>> root2 [key1] root2 হয় ['ob1']
& Nbsp; সত্য
& Nbsp; >>> key2 = root2 ['key2']
& Nbsp; >>> root2 [key2] root2 হয় ['OB2']
& Nbsp; সত্য
এবং আমরা বস্তু পেতে কি কল করতে পারেন:
& Nbsp; >>> key1 () root2 হয় ['ob1']
& Nbsp; সত্য
& Nbsp; >>> key2 () root2 হয় ['OB2']
& Nbsp; সত্য
আমরা এখনো সংরক্ষিত করা হয়েছে যে একটি বস্তুর জন্য কি রেফারেন্স পেতে পারে না:
& Nbsp; >>> KeyReferenceToPersistent (PersistentMapping ())
& Nbsp; ... # doctest: + + উপবৃত্ত
& Nbsp; ট্রেসব্যাক (সবচেয়ে সাম্প্রতিক কল শেষ):
& Nbsp; ...
& Nbsp; NotYet: ...
আমরা একটি NotYet ভুল পান করে. এই আমরা পরে একটি কী রেফারেন্স পেতে সক্ষম হতে পারে যে ইঙ্গিত দেয়.
তারা ZODB.interfaces.IConnection একটি অ্যাডাপ্টারের ক্ষেত্রে আমরা অসংরক্ষিত বস্তু রেফারেন্স পেতে পারেন. সংযোগ যোগ পদ্ধতি বস্তুর রেফারেন্স গণনা করার জন্য পর্যাপ্ত তথ্য, যা একটি বস্তুর আইডি, দিতে ব্যবহার করা হবে. এই দেখুন, আমরা একটি নিরীহ ভাবে IConnection কে কনর্ফাম করে একটি বস্তু তৈরি করব:
& Nbsp; >>> আমদানি ক্রমাগত
& Nbsp; >>> ZODB.interfaces IConnection আমদানি থেকে
& Nbsp; >>> বর্গ সি (persistent.Persistent):
& Nbsp; ... Def __conform __ (স্ব, iface):
& Nbsp; ... iface IConnection যদি:
& Nbsp; ... ফিরে conn2
& Nbsp; >>> ob3 = সি ()
& Nbsp; >>> key3 = KeyReferenceToPersistent (ob3)
& Nbsp; >>> transaction.abort ()
সংঘাত রেজোলিউশন
ZODB / ConflictResolution.txt আলোচনা দ্বন্দ্ব রেজল্যুশন সময়, ক্রমাগত বস্তু রেফারেন্স আসলে ZODB.ConflictResolution.PersistentReference দৃষ্টান্ত আছে. এই KeyReferenceToPersistent জন্য দুটি উপায়ে প্রাসঙ্গিক হয়. প্রথমত, এটা বর্গ একটি তনিমা ব্যাখ্যা: এটা persistent.Persistent থেকে উত্তরাধিকারী না. তা না হলে, এটি শুধু তার PersistentReference স্ট্যান্ড ইন, দ্বন্দ্ব রেজল্যুশন জন্য উপলব্ধ করা হবে না.
দ্বিতীয়ত, এটা __hash__ এবং __cmp__ পদ্ধতি কোড কিছু ব্যাখ্যা করে. এই পদ্ধতি শুধুমাত্র persistent.Persistent বস্তু, কিন্তু PersistentReference বস্তু হ্যান্ডেল করতে. এই আচরণ ছাড়া, কি বা সেট সদস্য হিসাবে KeyReferenceToPersistent ব্যবহার করে যেমন ক্লাসিক ZODB BTrees হিসাবে বস্তু, দ্বন্দ্ব সমাধান করতে হবে. এমনকি বিশেষ কোড, কিছু কিছু ক্ষেত্রে KeyReferenceToPersistent এটা নির্ভরযোগ্যভাবে তাই করতে পারে না, কারণ দ্বন্দ্ব রেজল্যুশন সময় তুলনা এবং হ্যাশ প্রত্যাখ্যান করবে.
__hash__ দ্বন্দ্ব রেজল্যুশন সময় অপেক্ষাকৃত খুব কমই কাজ করবে: শুধুমাত্র multidatabase রেফারেন্স জন্য. এখানে উদাহরণ একটি দম্পতি.
& Nbsp; >>> ZODB.ConflictResolution আমদানি PersistentReference থেকে
& Nbsp; >>> Def কারখানা (সুত্র):
& Nbsp; ... মাঝামাঝি = KeyReferenceToPersistent .__ নতুন __ (
& Nbsp; ... KeyReferenceToPersistent, রেফারেন্স)
& Nbsp; ... res.object = সুত্র
& Nbsp; ... ফিরে মাঝামাঝি
& Nbsp; ...
& Nbsp; >>> হ্যাশ (কারখানা (PersistentReference (
& Nbsp; ... ('একটি OID', 'বর্গ মেটাডাটা')))) # একটি সাধারণ রেফারেন্স
& Nbsp; ট্রেসব্যাক (সবচেয়ে সাম্প্রতিক কল শেষ):
& Nbsp; ...
& Nbsp; শাহো লিখেছেন: এই সময়ে ডাটাবেস নাম অনুপলব্ধ
& Nbsp; >>> bool, (হ্যাশ (কারখানা (PersistentReference (
& Nbsp; ... ['মি' ('একটি ডাটাবেস', 'একটি OID', 'বর্গ মেটাডাটা')])))) # multidatabase
& Nbsp; সত্য
এই KeyReferenceToPersistent প্রায়ই যেমন PersistentMapping হিসাবে ক্লাস জন্য দ্বন্দ্ব রেজল্যুশন রোধ করা হবে.
এক বস্তু একটি multidatabase রেফারেন্স এবং অন্যান্য হয় না, যদি না __cmp__ কাজ করে. এখানে কয়েকটি উদাহরণ.
& Nbsp; >>> CMP (কারখানা (PersistentReference (
& Nbsp; ... ('একটি OID', 'বর্গ মেটাডাটা'))),
& Nbsp; ... কারখানা (PersistentReference (
& Nbsp; ... ('একটি OID', 'বর্গ মেটাডাটা'))))
& Nbsp; 0
& Nbsp; >>> CMP (কারখানা (PersistentReference (
& Nbsp; ... ('একটি OID', 'বর্গ মেটাডাটা'))),
& Nbsp; ... কারখানা (PersistentReference (
& Nbsp; ... ('অন্য OID', 'বর্গ মেটাডাটা'))))
& Nbsp; -1
& Nbsp; >>> CMP (কারখানা (PersistentReference ('একটি OID')),
& Nbsp; ... কারখানা (PersistentReference (
& Nbsp; ... ('একটি OID', 'বর্গ মেটাডাটা'))))
& Nbsp; 0
& Nbsp; >>> CMP (কারখানা (PersistentReference ('একটি OID')),
& Nbsp; ... কারখানা (PersistentReference (
& Nbsp; ... ('একটি OID', 'বর্গ মেটাডাটা'))))
& Nbsp; 0
& Nbsp; >>> CMP (কারখানা (PersistentReference (
& Nbsp; ... ['মি' ('একটি ডাটাবেস', 'একটি OID', 'বর্গ মেটাডাটা')])),
& Nbsp; ... কারখানা (PersistentReference (
& Nbsp; ... ['মি' ('একটি ডাটাবেস', 'একটি OID', 'বর্গ মেটাডাটা')])))
& Nbsp; 0
& Nbsp; >>> CMP (কারখানা (PersistentReference (
& Nbsp; ... ['মি' ('একটি ডাটাবেস', 'একটি OID', 'বর্গ মেটাডাটা')])),
& Nbsp; ... কারখানা (PersistentReference (
& Nbsp; ... ['এন' ('একটি ডাটাবেস', 'একটি OID')])))
& Nbsp; 0
& Nbsp; >>> CMP (কারখানা (PersistentReference (
& Nbsp; ... ['মি' ('একটি ডাটাবেস', 'একটি OID', 'বর্গ মেটাডাটা')])),
& Nbsp; ... কারখানা (PersistentReference (
& Nbsp; ... ['মি' ('অন্য ডাটাবেস', 'একটি OID', 'বর্গ মেটাডাটা')])))
& Nbsp; -1
& Nbsp; >>> CMP (কারখানা (PersistentReference (
& Nbsp; ... ['মি' ('একটি ডাটাবেস', 'একটি OID', 'বর্গ মেটাডাটা')])),
& Nbsp; ... কারখানা (PersistentReference (
& Nbsp; ... ('একটি OID', 'বর্গ মেটাডাটা'))))
& Nbsp; ট্রেসব্যাক (সবচেয়ে সাম্প্রতিক কল শেষ):
& Nbsp; ...
& Nbsp; শাহো লিখেছেন: সাজানোর নির্ভরযোগ্যভাবে করতে পারেন না
অবস্থান ভিত্তিক সংযোগ অ্যাডাপ্টারের
ফাংশন zope.keyreference.connectionOfPersistent একটি সহজ অবস্থান ভিত্তিক অনুসন্ধানমূলক ব্যবহার করে সংযোগ বস্তু আত্তীকরণ করে. এটা বস্তুর একটি সংযোগ আছে একটি __parent__ আছে কিনা দেখতে চেক:
& Nbsp; >>> zope.keyreference.persistent আমদানি connectionOfPersistent থেকে
& Nbsp; >>> ob3 = PersistentMapping ()
& Nbsp; >>> মুদ্রণ connectionOfPersistent (ob3)
& Nbsp; কেউ
& Nbsp; >>> ob3 .__ parent__ = root2 ['ob1']
& Nbsp; >>> connectionOfPersistent (ob3) conn2 হয়
& Nbsp; সত্য

এই রিলিজে নতুন কি:

  • ফিক্স পরীক্ষা পরীক্ষা নির্ভরতা থেকে zope.testing অপসারণের দ্বারা ভাঙ্গা: এটা প্রয়োজন যে ZODB3 মডিউল এড়ানো.

আবশ্যক

  • পাইথন

বিকাশকারী অন্যান্য সফ্টওয়্যার Zope Corporation and Contributors

zope.app.zapi
zope.app.zapi

12 May 15

zope.app.http
zope.app.http

11 May 15

zope.security
zope.security

12 May 15

মন্তব্য zope.keyreference

পাওয়া মন্তব্যসমূহ না
মন্তব্য যোগ করুন
ছবি চালু!