Package: pymongo_inmemory
[PyPI][GitHub][BETA Docs]pymongo_inmemoryA mongo mocking library with an ephemeral MongoDB running in memory.What's new?v0.4.0Tooling enhancements. [PR #90]Configuration for data directory. [PR #90]Configuration for data directory. [PR #90]v0.3.1Development version upped to Python 3.9Update to build system. Contribution by@pbsdsCoercing boolean configs correctly. Issue#82Installationpipinstallpymongo-inmemoryUsageConfigureThere are several ways you can configurepymongo_inmemory.Insert a new section titledpymongo_inmemoryto your project'ssetup.cfgversion you want to spin up:[pymongo_inmemory]operating_system=ubuntuos_version=18mongod_port=27019Define anALL_CAPSenvironment variables with prefixPYMONGOIM__(attention to trailing double
underscores.) For instance, to override the port, set up an environment variablePYMONGOIM__MONGOD_PORT.Import and usepymongo_inmemorywraps the client classMongoClientthat comes frompymongoand configures with an ephemeral MongoDB server.
You can import thisMongoClientfrompymongo_inmemoryinstead ofpymongoand use it to perform tests:frompymongo_inmemoryimportMongoClientclient=MongoClient()# No need to provide hostdb=client['testdb']collection=db['test-collection']# etc., etc.client.close()# Also usable with context managerwithMongoClient()asclient:# do stuffConfigurationConfig parameterDescriptionDefaultmongo_versionWhich MongoD version to download and use.Latest for the OSmongod_portOverride port preference.Automatically picked between27017and28000after testing availabilityoperating_systemThis makes sense for Linux setting, where there are several flavoursAutomatically determined (Generic for Linux)*os_versionIf an operating system has several versions use this parameter to select oneLatest version of the OS will be selected from the listdownload_urlIf set, it won't attempt to determine which MongoDB to download. However there won't be a fallback either.Automatically determined from given parameters and usinginternal URL bank**ignore_cacheEven if there is a downloaded version in the cache, download it again.Falseuse_local_mongodIf set, it will try to use a local mongod instance instead of downloading one.Falsedownload_folderOverride the default download location.pymongo_inmemory/.cache/downloadextract_folderOverride the default extraction location.pymongo_inmemory/.cache/extractNEWmongod_data_folderProvide a data folder to be used by MongoD.ATemporaryDirectorywill be usedNEWmongo_client_hostHostname or connection stringNEWdbnameProvide a database name to connect'pimtest'*Note 1:Generic Linux version offering for MongoDB ends with version4.0.23. If the operating system is justlinuxand if selected MongoDB version is higher, it will default to4.0.23.*****Note 2:*** URL bank is filled with URLs collected fromrelease listandarchived released list, so if a version is not in the bank you can use the same list to provide an official download link.Available MongoDB versionsThere is an internalURL bankthat is filled with URLs collected fromrelease listandarchived released listBelow table is a summary of possible setting foroperating_system,os_versionand available MongoDB versions for
them to set asmongo_versionatmajor.minorlevel.Note that, not allmajor.minor.patchlevel is available for all OS versions. For exact patch level range, either see
release pages of MongoDB or have a look at the internalURL bank.operating_systemos_versionMongoDB versions (major.minor)amazon13.6, 3.2, 3.4, 4.2, 5.0, 4.0, 3.0, 4.4amazon27.0, 6.0, 3.6, 5.0, 4.2, 4.0, 4.4NEWamazon20237.0NEWamazon2023-arm7.0debian73.6, 3.0, 3.2, 3.4debian83.6, 4.0, 3.2, 3.4debian93.6, 5.0, 4.2, 4.0, 4.4debian104.2, 5.0, 6.0, 4.4debian117.0, 6.0, 5.0rhel53.0, 3.2rhel63.6, 3.2, 3.4, 4.2, 4.0, 3.0, 4.4rhel77.0, 6.0, 3.6, 3.2, 3.4, 4.2, 5.0, 4.0, 3.0, 4.4rhel87.0, 6.0, 3.6, 5.0, 4.2, 4.0, 4.4rhel97.0, 6.0NEWrhel-arm85.0, 7.0, 6.0, 4.4NEWrhel-arm97.0, 6.0suse113.6, 3.0, 3.2, 3.4suse127.0, 6.0, 3.6, 3.2, 3.4, 4.2, 5.0, 4.0, 4.4suse157.0, 6.0, 5.0, 4.2, 4.4ubuntu123.6, 3.0, 3.2, 3.4ubuntu143.6, 3.2, 3.4, 4.0, 3.0ubuntu163.6, 3.2, 3.4, 4.2, 4.0, 4.4ubuntu186.0, 3.6, 5.0, 4.2, 4.0, 4.4ubuntu205.0, 7.0, 6.0, 4.4ubuntu227.0, 6.0NEWubuntu-arm205.0, 7.0, 6.0, 4.4NEWubuntu-arm227.0, 6.0linuxgeneric3.6, 3.2, 3.4, 2.6, 4.0, 3.0osxgeneric7.0, 6.0, 3.6, 3.2, 3.4, 4.2, 5.0, 2.6, 4.0, 3.0, 4.4NEWmacosarm7.0, 6.0sunos53.0, 2.6, 3.2, 3.4windowsgeneric7.0, 6.0, 3.6, 3.2, 3.4, 4.2, 5.0, 2.6, 4.0, 3.0, 4.4*Note:No need to specifygeneric, as it will be chosen automatically since it's the only version for that OS.How do we determine which MongoDB to download?There are two (three if it's a Linux flavour) bits of information we need to determine a MongoDB:
operating system and MongoDB version.Note:You can always setdownload_urlto provide an exact URL to download from.Operating System detectionPython has limited tools in its standard library to determine the exact version of the operating
system and operating system version.pymongo_inmemorybasically reads output ofplatform.system()to determine if underlying OS is Linux, MacOS or Windows.For Windows and MacOS, it will download only one flavour of OS for a particular MongoDB version (64bit and, for Windows, Windows Server version if there is one.)
However, Linux has many flavours. Up to MongoDB4.0.23, a MongoDB for a generic Linux OS can still be downloaded, but for later
versions of MongoDB, there are no such builds, hence you will need to explicitly setoperating_systemparameter if you want to use MongoDB versions higher than that.Operating system detection behaviour ofpymongo_inmemorymight change in the future, if there is a demand for moremagic,
but for now we are keeping things simple.Deciding MongoDB versionIf no version is provided, highest version of MongoDB for the operating system is selected.If only amajorversion is given, like4, then highestminor.patchversion is selected, like 4.4.4.If onlymajor.minorversion is given, like4.0, then highestpatchversion is selected, like 4.0.23.If exactmajor.minor.patchversion is given, like4.0.22, then that version is selected.If patch version is not found. like4.0.50, highestpatchversion is selected, like4.0.23.If minor version is not found. like3.90.50, highestminor.patchversion is selected, like3.6.22.If major version is not found. like1.0.0, highestmajor.minor.patchversion is selected, like4.4.4.Supported Python versionsSince few development tools only support Python version 3.9 and above, all testing and tooling done
from that version up.This also limits the minimum Python version of tested features. However there shouldn't
be a hard limitation to use Python 3.5. We recommend upgrading older Python versions than that.DevelopmentProject is set up to develop withpoetry. We rely onpyenvto maintain the minimum supported
Python version.After installingpyenv,poetry, and cloning the repo, create the shell and install
all package requirements:pyenvinstall--skip-existing
poetryinstall--no-root
poetryshellRun the tests:pytestIf on NIX systems you can run further tests:bashtests/integrity/test_integrity.shAdding a new MongoDB versionFollow the guidehere.See how you can wet your feetCheck outgood first issues.